#!/bin/bash
set -e
if [ -z "${MountPoint}" ]; then
    EnvFile="../common/0_env.sh"
    # shellcheck source=../common/0_env.sh
    source ${EnvFile}
fi
echo -e "\n***********************************************************************"
echo -e "\t\t$0 : 测试 client 创建目录"
echo -e "***********************************************************************"

tmp_dir="/test_mkdir"
abs_tmp_dir="${MountPoint}${tmp_dir}"
SysUid=`cat /etc/passwd | grep ${SysUser} | awk -F: '{print $3}'`
SysGid=`cat /etc/passwd | grep ${SysUser} | awk -F: '{print $4}'`

function test_dir_quota()
{
    echo -e "\n------test_dir_quota------"
    limits="--hardnum=1000"
    create_quota ${tmp_dir} ${limits}
    
    dirnum=10
    create_many_dir ${abs_tmp_dir} ${dirnum}
    check_usedsize_and_usednum ${tmp_dir}
    
    clean_dir ${abs_tmp_dir}
    check_usedsize_and_usednum ${tmp_dir}

    remove_quota_dir ${tmp_dir}
}

function test_dir_quota_exceed()
{
    echo -e "\n------test_dir_quota_exceed------"
    limits="--hardnum=10"
    create_quota ${tmp_dir} ${limits}
    
    dirnum=11
    
    set +e
    create_many_dir ${abs_tmp_dir} ${dirnum}
    set -e
    check_usedsize_and_usednum ${tmp_dir}

    clean_dir ${abs_tmp_dir}
    check_usedsize_and_usednum ${tmp_dir}

    remove_quota_dir ${tmp_dir}
}

function test_uid_quota()
{
    echo -e "\n------test_uid_quota------"
    chown -R "${SysUid}":"${SysGid}" ${abs_tmp_dir}

    limits="--hardnum=1000 --uid=${SysUid}"
    create_quota ${tmp_dir} "${limits}"
    
    dirnum=10

    su ${SysUser} <<EOF
        source ${commonFunc}
        create_many_dir ${abs_tmp_dir} ${dirnum}
EOF

    check_usednum ${tmp_dir} "--uid=${SysUid}"

    clean_dir ${abs_tmp_dir}
    check_usedsize_and_usednum ${tmp_dir} "--uid=${SysUid}"

    remove_quota_dir ${tmp_dir} "--uid=${SysUid}"
}

function test_gid_quota()
{
    echo -e "\n------test_gid_quota------"
    chown -R "${SysUid}":"${SysGid}" ${abs_tmp_dir}

    limits="--hardnum=1000 --gid=${SysGid}"
    create_quota ${tmp_dir} "${limits}"
    
    dirnum=10

    su ${SysUser} <<EOF
        source ${commonFunc}
        create_many_dir ${abs_tmp_dir} ${dirnum}
EOF

    check_usedsize_and_usednum ${tmp_dir} "--gid=${SysGid}"

    clean_dir ${abs_tmp_dir}
    check_usedsize_and_usednum ${tmp_dir} "--gid=${SysGid}"

    remove_quota_dir ${tmp_dir} "--gid=${SysGid}"
}

function test_uid_gid_quota()
{
    echo -e "\n------test_uid_gid_quota------"
    chown -R "${SysUid}":"${SysGid}" ${abs_tmp_dir}

    limits="--hardnum=1000 --uid=${SysUid}"
    create_quota ${tmp_dir} "${limits}"

    limits="--hardnum=2000 --gid=${SysGid}"
    create_quota ${tmp_dir} "${limits}"
    
    dirnum=10

    su ${SysUser} <<EOF
        source ${commonFunc}
        create_many_dir ${abs_tmp_dir} ${dirnum}
EOF

    check_usedsize_and_usednum ${tmp_dir} "--uid=${SysUid}"
    check_usedsize_and_usednum ${tmp_dir} "--gid=${SysGid}"

    clean_dir ${abs_tmp_dir}
    check_usedsize_and_usednum ${tmp_dir} "--uid=${SysUid}"
    check_usedsize_and_usednum ${tmp_dir} "--gid=${SysGid}"

    remove_quota_dir ${tmp_dir} "--uid=${SysUid}"
    remove_quota_dir ${tmp_dir} "--gid=${SysGid}"
}

remove_all_quota_for_dir ${tmp_dir}
mkdir -p ${abs_tmp_dir}
orcafs-ctl --setpattern --storagepoolid=2 "${abs_tmp_dir}" &> /dev/null
clean_dir ${abs_tmp_dir}
chown -R root:root ${abs_tmp_dir}

test_dir_quota
test_uid_quota
test_gid_quota
test_dir_quota_exceed

rm_abs_dir ${abs_tmp_dir}